// @/utils/snowflake.js
export function generateSnowflakeId() {
  // 定义雪花 ID 的起始时间戳（以毫秒为单位）
  const epoch = 1609459200000; // 2021-01-01 00:00:00 UTC

  // 定义机器 ID 和数据中心 ID
  const machineId = 1; // 你需要根据实际情况设置机器 ID
  const dataCenterId = 1; // 你需要根据实际情况设置数据中心 ID

  // 定义每个部分的位数
  const timestampBits = 41;
  const machineIdBits = 5;
  const dataCenterIdBits = 5;
  const sequenceBits = 12;

  // 计算最大序列值
  const maxSequence = (1 << sequenceBits) - 1;

  // 声明 previousId 变量
  let previousId;

  // 定义生成 ID 的函数
  return function() {
    let timestamp = Date.now() - epoch;
    let sequence = 0;

    // 获取当前时间戳和序列值
    const id = (timestamp << (machineIdBits + dataCenterIdBits + sequenceBits)) |
              (machineId << (dataCenterIdBits + sequenceBits)) |
              (dataCenterId << sequenceBits) |
              sequence;

    // 如果当前时间戳与上一次生成 ID 的时间戳相同，则增加序列值
    if (id === previousId) {
      sequence = (sequence + 1) & maxSequence;
      if (sequence === 0) {
        // 如果序列值溢出，则等待下一个时间戳
        timestamp = waitNextMillis(timestamp);
      }
    } else {
      sequence = 0;
    }

    // 更新 previousId
    previousId = id;
    console.log("xuehua id", id)
    return id;
  };
}

// 等待下一个毫秒的函数
function waitNextMillis(currentTimestamp) {
  let timestamp = Date.now() - epoch;
  while (timestamp <= currentTimestamp) {
    timestamp = Date.now() - epoch;
  }
  return timestamp;
}
